using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Serialization;

public class ItemManager : MonoBehaviour
{
    // 所有道具的列表
    public List<Item> AllItems;

    // 分类管理的道具列表
    public List<BasicItem> basicItems = new List<BasicItem>();
    public List<StoryItem> storyItems = new List<StoryItem>();
    public List<FunctionalItem> functionalItems = new List<FunctionalItem>();
    public List<PowerUpItem> powerUpItems = new List<PowerUpItem>();
    public List<ConsumableItem> consumableItems = new List<ConsumableItem>();
    
    
    // 道具预制体的引用
    public GameObject itemPrefab;

    // 初始化道具列表
    void Start()
    {
        LoadAllItems();
    }

    // 添加道具到列表
    public void AddItem(Item item)
    {
        AllItems.Add(item);
        CategorizeItem(item); // 进行分类
    }

    // 从资源文件夹加载所有道具
    private void LoadAllItems()
    {
        // 分别从不同文件夹加载道具
        LoadItemsFromFolder<BasicItem>("Items/BasicItems", basicItems);
        LoadItemsFromFolder<StoryItem>("Items/StoryItems", storyItems);
        LoadItemsFromFolder<FunctionalItem>("Items/FunctionalItems", functionalItems);
        LoadItemsFromFolder<PowerUpItem>("Items/PowerUpItems", powerUpItems);
        LoadItemsFromFolder<ConsumableItem>("Items/Consumable",consumableItems);
        
        // 将所有道具汇总到总列表中
        AllItems.AddRange(basicItems);
        AllItems.AddRange(storyItems);
        AllItems.AddRange(functionalItems);
        AllItems.AddRange(powerUpItems);
        AllItems.AddRange(consumableItems);
    }

    // 根据道具类型分类
    private void CategorizeItem(Item item)
    {
        if (item is BasicItem basicItem)
        {
            if (basicItem is ConsumableItem consumableItem)
            {
                consumableItems.Add(consumableItem);
            }
            else
            {
                basicItems.Add(basicItem);
            }
            
        }
        else if (item is StoryItem storyItem)
        {
            storyItems.Add(storyItem);
        }
        else if (item is FunctionalItem functionalItem)
        {
            functionalItems.Add(functionalItem);
        }
        else if (item is PowerUpItem powerUpItem)
        {
            powerUpItems.Add(powerUpItem);
        }
        
        else
        {
            Debug.LogWarning($"未分类的道具: {item.itemName}");
        }
    }

    // 泛型方法：从指定文件夹加载某种类型的道具
    private void LoadItemsFromFolder<T>(string folderPath, List<T> itemList) where T : Item
    {
        // 从 Resources 文件夹的指定路径加载所有类型为 T 的道具
        T[] loadedItems = Resources.LoadAll<T>(folderPath);
        itemList.AddRange(loadedItems);
        Debug.Log($"从 {folderPath} 加载了 {loadedItems.Length} 个 {typeof(T).Name} 道具");
    }

    // 实例化道具预制体并设置其位置
    public void SpawnItemInScene(Item item, Vector3 position)
    {
        // 创建道具实例
        GameObject itemInstance = Instantiate(itemPrefab, position, Quaternion.identity);

        // 设置道具图标
        SpriteRenderer renderer = itemInstance.GetComponent<SpriteRenderer>();
        if (renderer != null)
        {
            // todo:加载对应道具的信息
            renderer.sprite = item.icon;
        }
        // 设置 PickupItem 脚本的 itemData 字段
        PickupItem pickupItem = itemInstance.GetComponent<PickupItem>();
        if (pickupItem != null)
        {
            pickupItem.item = item;
        }
    }
    
    // 用于调试道具数值
    // 根据道具编号获取道具
    public Item GetItemByCode(string code)
    {
        foreach (Item item in AllItems)
        {
            if (item.code == code)
                return item; // 找到匹配的道具
        }

        Debug.LogWarning($"未找到编号为 {code} 的道具！");
        return null; // 未找到道具
    }
}
